home *** CD-ROM | disk | FTP | other *** search
- # bash completion for java, javac and javadoc
-
- # available path elements completion
- have java && {
- _java_path()
- {
- cur=${cur##*:}
- _filedir '@(jar|zip)'
- }
-
- # exact classpath determination
- _java_find_classpath()
- {
- local i
-
- # search first in current options
- for (( i=1; i < COMP_CWORD; i++ )); do
- if [[ "${COMP_WORDS[i]}" == -@(cp|classpath) ]]; then
- classpath=${COMP_WORDS[i+1]}
- break
- fi
- done
-
- # default to environment
- [ -z "$classpath" ] && classpath=$CLASSPATH
-
- # default to current directory
- [ -z "$classpath" ] && classpath=.
- }
-
- # exact sourcepath determination
- _java_find_sourcepath()
- {
- local i
-
- # search first in current options
- for (( i=1; i < COMP_CWORD; i++ )); do
- if [[ "${COMP_WORDS[i]}" == -sourcepath ]]; then
- sourcepath=${COMP_WORDS[i+1]}
- break
- fi
- done
-
- # default to classpath
- if [ -z "$sourcepath" ]; then
- _java_find_classpath
- sourcepath=$classpath
- fi
- }
-
- # available classes completion
- _java_classes()
- {
- local classpath i
-
- # find which classpath to use
- _java_find_classpath
-
- # convert package syntax to path syntax
- cur=${cur//.//}
- # parse each classpath element for classes
- for i in ${classpath//:/ }; do
- if [[ -r $i && "$i" == *.@(jar|zip) ]]; then
- if type zipinfo &>/dev/null; then
- COMPREPLY=( "${COMPREPLY[@]}" $( zipinfo -1 \
- "$i" "$cur*" 2>/dev/null | \
- command grep '^[^$]*\.class$' ) )
- else
- COMPREPLY=( "${COMPREPLY[@]}" $( jar tf "$i" \
- "$cur" | command grep '^[^$]*\.class$' ) )
- fi
-
- elif [ -d $i ]; then
- # Intentionally looking for *.class only in $i (not subdirs),
- # see Debian bug #496828.
- COMPREPLY=( "${COMPREPLY[@]}"
- $( command ls $i/$cur*.class 2>/dev/null | \
- sed -ne '/\$/d' -e "s|^$i//*||p" ) )
-
- # FIXME: if we have foo.class and foo/, the completion
- # returns "foo/"... how to give precedence to files
- # over directories?
- fi
- done
-
- # remove class extension
- COMPREPLY=( ${COMPREPLY[@]%.class} )
- # convert path syntax to package syntax
- COMPREPLY=( ${COMPREPLY[@]//\//.} )
- }
-
- # available packages completion
- _java_packages()
- {
- local sourcepath i
-
- # find which sourcepath to use
- _java_find_sourcepath
-
- # convert package syntax to path syntax
- cur=${cur//.//}
- # parse each sourcepath element for packages
- for i in ${sourcepath//:/ }; do
- if [ -d $i ]; then
- COMPREPLY=( "${COMPREPLY[@]}" $( command ls -F -d \
- $i/$cur* 2>/dev/null | sed -e 's|^'$i'/||' ) )
- fi
- done
- # keep only packages
- COMPREPLY=( $( tr " " "\n" <<<"${COMPREPLY[@]}" | command grep "/$" ) )
- # remove packages extension
- COMPREPLY=( ${COMPREPLY[@]%/} )
- # convert path syntax to package syntax
- cur=${COMPREPLY[@]//\//.}
- }
-
- # java completion
- #
- _java()
- {
- local cur prev i
-
- COMPREPLY=()
- _get_comp_words_by_ref cur prev
-
- for ((i=1; i < $COMP_CWORD; i++)); do
- case ${COMP_WORDS[$i]} in
- -cp|-classpath)
- ((i++)) # skip the classpath string.
- ;;
- -*)
- # this is an option, not a class/jarfile name.
- ;;
- *)
- # once we've seen a class, just do filename completion
- _filedir
- return 0
- ;;
- esac
- done
-
- case $prev in
- -cp|-classpath)
- _java_path
- return 0
- ;;
- esac
-
- if [[ "$cur" == -* ]]; then
- # relevant options completion
- COMPREPLY=( $( compgen -W '-client -hotspot -server -classic \
- -classpath -D -verbose -verbose:class \
- -verbose:gc -version:jni -version \
- -showversion -help -X -jar \
- -enableassertions -disableassertions \
- -enablesystemassertions -disablesystemassertions ' -- "$cur" ) )
- else
- if [[ "$prev" == -jar ]]; then
- # jar file completion
- _filedir jar
- else
- # classes completion
- _java_classes
- fi
- fi
- }
- complete -F _java -o filenames java
- }
-
- have javadoc &&
- _javadoc()
- {
- COMPREPLY=()
- local cur prev classpath
-
- _get_comp_words_by_ref cur prev
-
- case $prev in
- -overview|-helpfile|-stylesheetfile)
- _filedir
- return 0
- ;;
- -d)
- _filedir -d
- return 0
- ;;
- -classpath|-bootclasspath|-docletpath|-sourcepath|-extdirs)
- _java_path
- return 0
- ;;
- esac
-
- if [[ "$cur" == -* ]]; then
- # relevant options completion
- COMPREPLY=( $( compgen -W '-overview -public -protected \
- -package -private -help -doclet -docletpath \
- -sourcepath -classpath -exclude -subpackages \
- -breakiterator -bootclasspath -source -extdirs \
- -verbose -locale -encoding -J -d -use -version \
- -author -docfilessubdirs -splitindex \
- -windowtitle -doctitle -header -footer -bottom \
- -link -linkoffline -excludedocfilessubdir \
- -group -nocomment -nodeprecated -noqualifier \
- -nosince -nodeprecatedlist -notree -noindex \
- -nohelp -nonavbar -quiet -serialwarn -tag \
- -taglet -tagletpath -charset -helpfile \
- -linksource -stylesheetfile -docencoding' -- "$cur" ) )
- else
- # source files completion
- _filedir java
- # packages completion
- _java_packages
- fi
- } &&
- complete -F _javadoc -o filenames javadoc
-
- have javac &&
- _javac()
- {
- COMPREPLY=()
- local cur prev
-
- _get_comp_words_by_ref cur prev
-
- case $prev in
- -d)
- _filedir -d
- return 0
- ;;
- -classpath|-bootclasspath|-sourcepath|-extdirs)
- _java_path
- return 0
- ;;
- esac
-
- if [[ "$cur" == -* ]]; then
- # relevant options completion
- COMPREPLY=( $( compgen -W '-g -g:none -g:lines -g:vars \
- -g:source -O -nowarn -verbose -deprecation -classpath \
- -sourcepath -bootclasspath -extdirs -d -encoding -source \
- -target -help' -- "$cur" ) )
- else
- # source files completion
- _filedir java
- fi
- } &&
- complete -F _javac -o filenames javac
-
- have pack200 &&
- _pack200()
- {
- COMPREPLY=()
- local cur prev
- _get_comp_words_by_ref cur prev
-
- case $prev in
- -S|--segment-limit|-P|--pass-file|-C|--class-attribute|\
- -F|--field-attribute|-M|--method-attribute|-D|--code-attribute|\
- '-?'|-h|--help|-V|--version|-J)
- return 0
- ;;
- -E|--effort)
- COMPREPLY=( $( compgen -W '0 1 2 3 4 5 6 7 8 9' -- "$cur" ) )
- return 0
- ;;
- -H|--deflate-hint)
- COMPREPLY=( $( compgen -W 'true false keep' -- "$cur" ) )
- return 0
- ;;
- -m|--modification-time)
- COMPREPLY=( $( compgen -W 'latest keep' -- "$cur" ) )
- return 0
- ;;
- -U|--unknown-attribute)
- COMPREPLY=( $( compgen -W 'error strip pass' -- "$cur" ) )
- return 0
- ;;
- -f|--config-file)
- _filedir properties
- return 0
- ;;
- -l|--log-file)
- COMPREPLY=( $( compgen -W '-' -- "$cur" ) )
- _filedir log
- return 0
- ;;
- esac
-
- # Check if a pack or a jar was already given.
- local i pack=false jar=false
- for (( i=0; i < ${#COMP_WORDS[@]}-1; i++ )) ; do
- case ${COMP_WORDS[i]} in
- *.pack|*.pack.gz) pack=true ;;
- *.jar) jar=true ;;
- esac
- done
-
- if ! $pack ; then
- if [[ "$cur" == -* ]] ; then
- COMPREPLY=( $( compgen -W '--no-gzip --gzip --strip-debug \
- --no-keep-file-order --segment-limit= --effort= \
- --deflate-hint= --modification-time= --pass-file= \
- --unknown-attribute= --class-attribute= --field-attribute= \
- --method-attribute= --code-attribute= --config-file= \
- --verbose --quiet --log-file= --help --version -J' -- "$cur" ) )
- [[ ${#COMPREPLY[@]} -eq 1 && ${COMPREPLY[0]} == *= ]] && \
- type compopt &>/dev/null && compopt -o nospace
- else
- _filedir 'pack?(.gz)'
- fi
- elif ! $jar ; then
- _filedir jar
- fi
- } &&
- complete -F _pack200 pack200
-
- have unpack200 &&
- _unpack200()
- {
- COMPREPLY=()
- local cur prev
- _get_comp_words_by_ref cur prev
-
- case $prev in
- '-?'|-h|--help|-V|--version|-J)
- return 0
- ;;
- -H|--deflate-hint)
- COMPREPLY=( $( compgen -W 'true false keep' -- "$cur" ) )
- return 0
- ;;
- -l|--log-file)
- COMPREPLY=( $( compgen -W '-' -- "$cur" ) )
- _filedir log
- return 0
- ;;
- esac
-
- # Check if a pack or a jar was already given.
- local i pack=false jar=false
- for (( i=0; i < ${#COMP_WORDS[@]}-1; i++ )) ; do
- case ${COMP_WORDS[i]} in
- *.pack|*.pack.gz) pack=true ;;
- *.jar) jar=true ;;
- esac
- done
-
- if ! $pack ; then
- if [[ "$cur" == -* ]] ; then
- COMPREPLY=( $( compgen -W '--deflate-hint= --remove-pack-file \
- --verbose --quiet --log-file= --help --version' -- "$cur" ) )
- [[ ${#COMPREPLY[@]} -eq 1 && ${COMPREPLY[0]} == *= ]] && \
- type compopt &>/dev/null && compopt -o nospace
- else
- _filedir 'pack?(.gz)'
- fi
- elif ! $jar ; then
- _filedir jar
- fi
- } &&
- complete -F _unpack200 unpack200
-
- have jarsigner &&
- _jarsigner()
- {
- COMPREPLY=()
- local cur prev
- _get_comp_words_by_ref cur prev
-
- case $prev in
- -keystore)
- COMPREPLY=( $( compgen -W 'NONE' -- "$cur" ) )
- _filedir '@(jks|ks|p12|pfx)'
- return 0
- ;;
- -storepass|-keypass|-sigfile|-digestalg|-sigalg|-tsacert|-altsigner|\
- -altsignerpath|-providerName|-providerClass|-providerArg)
- return 0
- ;;
- -storetype)
- COMPREPLY=( $( compgen -W 'JKS PKCS11 PKCS12' -- "$cur" ) )
- return 0
- ;;
- -signedjar)
- _filedir jar
- return 0
- ;;
- -tsa)
- _filedir
- return 0
- ;;
- esac
-
- # Check if a jar was already given.
- local i jar=false
- for (( i=0; i < ${#COMP_WORDS[@]}-1; i++ )) ; do
- if [[ "${COMP_WORDS[i]}" == *.jar && \
- "${COMP_WORDS[i-1]}" != -signedjar ]] ; then
- jar=true
- break
- fi
- done
-
- if ! $jar ; then
- if [[ "$cur" == -* ]] ; then
- # Documented as "should not be used": -internalsf, -sectionsonly
- COMPREPLY=( $( compgen -W '-keystore -storepass -storetype \
- -keypass -sigfile -signedjar -digestalg -sigalg -verify \
- -verbose -certs -tsa -tsacert -altsigner -altsignerpath \
- -protected -providerName -providerClass -providerArg' \
- -- "$cur" ) )
- fi
- _filedir jar
- fi
- } &&
- complete -F _jarsigner -o filenames jarsigner
-
- # Local variables:
- # mode: shell-script
- # sh-basic-offset: 4
- # sh-indent-comment: t
- # indent-tabs-mode: nil
- # End:
- # ex: ts=4 sw=4 et filetype=sh
-